package com.ruoyi.electricity.mapper;

import java.util.Date;
import java.util.List;

import com.ruoyi.electricity.domain.DTO.AlarmLevelCount;
import com.ruoyi.electricity.domain.DTO.RiskWarningDto;
import com.ruoyi.electricity.domain.TRiskWarnings;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;

/**
 * 风险预警管理Mapper接口
 *
 * @author wu
 * @date 2023-10-28
 */
public interface TRiskWarningsMapper {
    /**
     * 查询风险预警管理
     *
     * @param id 风险预警管理ID
     * @return 风险预警管理
     */
    public TRiskWarnings selectTRiskWarningsById(Long id);

    /**
     * 查询风险预警管理列表
     *
     * @param tRiskWarnings 风险预警管理
     * @return 风险预警管理集合
     */
    public List<TRiskWarnings> selectTRiskWarningsList(TRiskWarnings tRiskWarnings);

    /**
     * 新增风险预警管理
     *
     * @param tRiskWarnings 风险预警管理
     * @return 结果
     */
    public int insertTRiskWarnings(TRiskWarnings tRiskWarnings);

    /**
     * 修改风险预警管理
     *
     * @param tRiskWarnings 风险预警管理
     * @return 结果
     */
    public int updateTRiskWarnings(TRiskWarnings tRiskWarnings);

    /**
     * 删除风险预警管理
     *
     * @param id 风险预警管理ID
     * @return 结果
     */
    public int deleteTRiskWarningsById(Long id);

    /**
     * 批量删除风险预警管理
     *
     * @param ids 需要删除的数据ID
     * @return 结果
     */
    public int deleteTRiskWarningsByIds(Long[] ids);

    @Select("SELECT alarm_level as alarmLevel, COUNT(*) AS count " +
            "FROM t_risk_warnings " +
            "WHERE alarm_time >= #{startTime} AND alarm_time < #{endTime} " +
            "GROUP BY alarm_level")
    List<AlarmLevelCount> countAlarmLevelByTime(@Param("startTime") Date startTime, @Param("endTime") Date endTime);

    @Select("SELECT DATE_FORMAT(alarm_time, '%Y年%m月%d日 %H:%i:%s') as time, " +
            "alarm_type_name as alarmTypeName, " +
            "alarmReason as alarmReason, " +
            "handelStatus as handelStatus " +
            "FROM t_risk_warnings " +
            "ORDER BY alarm_time DESC")
    List<RiskWarningDto> getAllRiskWarnings();
@Select("SELECT DISTINCT alarm_level as alarmLevel FROM t_risk_warnings ")
    List<String> selectAllLevel();
}
